home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
c
/
recio202.zip
/
rcputs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-05
|
4KB
|
101 lines
/*****************************************************************************
MODULE: rcputs.c
PURPOSE: recio column delimited string and char output functions
COPYRIGHT: (C) 1994 William Pierpoint
COMPILER: Borland C Version 3.1
OS: MSDOS Version 6.2
VERSION: 2.02
RELEASE: May 5, 1994
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "recio.h"
#define rcol(rp) ((rp)->r_colno)
#define rfp(rp) ((rp)->r_fp)
#define rflags(rp) ((rp)->r_flags)
#define rfldch(rp) ((rp)->r_fldch)
#define rtxtch(rp) ((rp)->r_txtch)
extern int _rstatus(REC *rp, int mode);
extern int _rputc(REC *rp, int ch);
/****************************************************************************/
int /* return 0 on success; !0 on error */
rcputc( /* put character to record stream */
REC *rp, /* record pointer */
size_t col, /* column position */
int ch) /* character to put to record stream */
/****************************************************************************/
{
int err=EOF; /* return error (0=no error; !0=error) */
if (!_rstatus(rp, R_WRITE)) {
if (col >= rcolno(rp)) {
rfldno(rp)++;
/* if colno < col, pad with spaces */
while (rcolno(rp) < col) {
err = _rputc(rp, ' ');
if (err) goto done;
}
/* put character */
err = _rputc(rp, ch);
} else {
rseterr(rp, R_EINVAL); \
}
}
done:
return err;
}
/****************************************************************************/
int /* return 0 on success; !0 on error */
rcputs( /* put string to record stream */
REC *rp, /* record pointer */
size_t begcol, /* beginning column */
size_t endcol, /* ending column */
char *str) /* pointer to string */
/****************************************************************************/
/* note: assumes str does not contain a newline character */
{
int err=EOF; /* return error (0=no error; !0=error) */
size_t sl; /* string length */
if (!_rstatus(rp, R_WRITE)) {
if (endcol >= begcol && begcol >= rcolno(rp)) {
rfldno(rp)++;
/* if colno < begcol, pad with spaces */
while (rcolno(rp) < begcol) {
err = _rputc(rp, ' ');
if (err) goto done;
}
sl = strlen(str);
/* if str is too long for space */
if (sl > (endcol-begcol+1)) {
rsetwarn(rp, R_WWIDTH);
/* put as much of the string as possible */
while (rcolno(rp) <= endcol) {
err = _rputc(rp, *str++);
if (err) goto done;
}
} else {
err = fputs(str, rfp(rp));
if (err==EOF) {
rseterr(rp, R_ENOPUT);
} else {
err = 0;
rcol(rp) += sl;
}
}
} else {
rseterr(rp, R_EINVAL); \
}
}
done:
return err;
}